/**
 * Description:
 * Class Name:FinalVariableTest
 * Date:2022/1/29 10:26
 *
 * @author LTisme
 * @version JAVA17
 */
package 疯狂Java讲义.第6章_面向对象_下._6_4_final修饰符;

public class FinalVariableTest {
    // 定义成员变量时指定默认值，合法
    final int a = 6;
    // 下面地变量将在构造器或初始化块中分配初始值
    final String str;
    final int c;
    final static double d;
    // 下面地ch是不合法的，因为没有显示地给它指定初始值
    {
        str = "Hello";
        // 下面不合法，因为已经在声明实例变量时赋予初始值过了，不能再次赋值
        // a = 6;
    }
    static {
        // 在类初始化块中为类变量指定初始值，合法
        d = 5.6d;
    }
    public FinalVariableTest(){
        // 合法
        c = 5;
        // 非法，因为已经在实例初始化块中赋予了初始值
        // str = "java";
    }
    public void tryToChangeFinal(){
        // 不合法，因为不能为final修饰地成员变量再赋值
        // d = 1.2;
        System.out.println("I'm tryToChangeFinal");
    }

    public static void main(String[] args) {
        var ft = new FinalVariableTest();
        ft.tryToChangeFinal();
        System.out.println(ft.a);
        System.out.println(ft.c);
        System.out.println(ft.d);
    }
}
